package com.china08.yxyapi.repository.mg.homework;

import java.util.List;

import org.springframework.data.mongodb.repository.MongoRepository;

import com.china08.yxyapi.entity.mg.homework.HomeworkTaskQues;

/**
 * 作业:任务:试题,每个作业的每一道题生成一条数据。
 * 
 * @author Richard Wang
 *
 */
public interface HomeworkTaskQuesRepository extends MongoRepository<HomeworkTaskQues, String> {

    /**
     * 根据任务ID查询该任务下的所有的题信息 2017年3月14日16:47:19
     * 
     * @param homeworkTaskId
     * @return
     */
    List<HomeworkTaskQues> findByTaskId(String homeworkTaskId);

    /**
     * 根据任务ID和类型查询作业 2017年3月17日11:02:10
     * 
     * @param homeworkTaskId
     *            任务ID
     * @param string
     *            试题类型 0--单选择题，1--多选择题，2--通知类
     * @return
     */
    List<HomeworkTaskQues> findByTaskIdAndQuesType(String homeworkTaskId, String quesType);

    HomeworkTaskQues findTop1ByTaskIdAndQuesType(String homeworkTaskId, String quesType);

    List<HomeworkTaskQues> findByTaskIdAndQuesTypeInOrderByOrderAsc(String homeworkTaskId, List<String> quesType);

    List<HomeworkTaskQues> findByTaskIdAndQuesTypeInOrderByOrderAsc(String homeworkTaskId, String[] quesType);

    /**
     * 查看本次任务中作业数量
     * 
     * @param homeworkTaskId
     * @param quesType
     * @return
     */
    Integer countByTaskIdAndQuesType(String homeworkTaskId, String quesType);

    /**
     * 本次任务总题数
     * 
     * @param TaskId
     *            任务Id
     * @return
     */
    Integer countByTaskId(String taskId);

    Integer countByTaskIdAndQuesTypeIn(String homeworkTaskId, List<String> quesType);

    Integer countByTaskIdAndQuesTypeNotIn(String homeworkTaskId, List<String> quesType);

    Integer countByTaskIdAndQuesTypeNotInAndIfNeedSumbit(String homeworkTaskId, List<String> quesType,
            Boolean ifNeedSumbit);

    Integer countByTaskIdAndQuesTypeAndIfNeedSumbit(String homeworkTaskId, String quesType, Boolean ifNeedSumbit);

    /**
     * 根据任务ID和类型查询不是当前类型的作业 2017年3月18日16:39:17
     * 
     * @param homeworkTaskId任务ID
     * @param quesType
     *            试题类型 0--单选择题，1--多选择题，2--通知类
     * @return
     */
    List<HomeworkTaskQues> findByTaskIdAndQuesTypeNot(String homeworkTaskId, String quesType);

    /**
     * 根据任务ID和类型的ID查询的作业
     * 
     * @param quesType
     * @param taskId
     * @return
     */
    List<HomeworkTaskQues> findByQuesTypeAndTaskId(String quesType, String taskId);

    /**
     * 查 指定任务id 试题类型不是quesType的试题的总数
     * 
     * @param taskId
     *            任务id
     * @param quesType
     *            试题类型
     * @return
     */
    Integer countByTaskIdAndQuesTypeNot(String taskId, String quesType);

    /**
     * 根据题ID查询作业信息
     * 
     * @param quesId
     * @return
     */
    List<HomeworkTaskQues> findByQuesId(String quesId);

    /**
     * 通过任务id和试题类型查询记录并且按照试题序号排序
     * 
     * @param taskId
     * @param string
     * @return
     */
    List<HomeworkTaskQues> findByTaskIdAndQuesTypeNotInOrderByOrder(String taskId, String string);

    /**
     * 根据任务Id和问题Id查询当前任务
     * 
     * @param quesId
     * @param taskId
     * @return
     */
    List<HomeworkTaskQues> findByQuesIdAndTaskId(String quesId, String taskId);

    HomeworkTaskQues findTop1ByQuesIdAndTaskId(String quesId, String taskId);

    /**
     * 通过学生id和任务id和试题id获取记录
     * 
     * @param studentId
     * @param taskId
     * @param quesId
     * @return
     */
    HomeworkTaskQues findByTaskIdAndQuesId(String taskId, String quesId);

    /**
     * 通过任务id查询记录并且排序
     * 
     * @param taskId
     * @return
     */
    List<HomeworkTaskQues> findByTaskIdOrderByOrder(String taskId);

    void deleteByTaskId(String taskId);

    List<HomeworkTaskQues> findByQuesTypeAndIfNeedSumbit(String string, Object object);

    List<HomeworkTaskQues> findByQuesTypeAndQuesImageNotNull(String string);

    List<HomeworkTaskQues> findBySourceNotAndTaskType(int i, String string);
}
